// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.sina.weibo.sdk.auth.sso; import android.app.Activity; import android.app.ActivityManager; import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.text.TextUtils; import com.sina.weibo.sdk.auth.Oauth2AccessToken; import com.sina.weibo.sdk.auth.WeiboAuth; import com.sina.weibo.sdk.auth.WeiboAuthListener; import com.sina.weibo.sdk.exception.WeiboDialogException; import com.sina.weibo.sdk.utils.LogUtil; import com.sina.weibo.sdk.utils.SecurityHelper; import java.util.Iterator; import java.util.List; public class SsoHandler { private static final String DEFAULT_SINA_WEIBO_PACKAGE_NAME = "com.sina.weibo"; private static final String DEFAULT_WEIBO_REMOTE_SSO_SERVICE_NAME = "com.sina.weibo.remotessoservice"; private static final int REQUEST_CODE_SSO_AUTH = 32973; private static final String TAG = "Weibo_SSO_login"; private Activity mAuthActivity; private WeiboAuthListener mAuthListener; private ServiceConnection mConnection; private int mSSOAuthRequestCode; private WeiboAuth mWeibo; public SsoHandler(Activity activity, WeiboAuth weiboauth) { mConnection = new _cls1(); mAuthActivity = activity; mWeibo = weiboauth; } private boolean bindRemoteSSOService(Context context, String s) { boolean flag = true; if (TextUtils.isEmpty(s) || s.trim().equals("")) { s = "com.sina.weibo"; } Intent intent = new Intent("com.sina.weibo.remotessoservice"); intent.setPackage(s); if (!context.bindService(intent, mConnection, flag)) { flag = context.bindService(new Intent("com.sina.weibo.remotessoservice"), mConnection, flag); } return flag; } public static ComponentName isServiceExisted(Context context, String s) { Iterator iterator = ((ActivityManager)context.getSystemService("activity")).getRunningServices(0x7fffffff).iterator(); ComponentName componentname; do { if (!iterator.hasNext()) { return null; } componentname = ((android.app.ActivityManager.RunningServiceInfo)iterator.next()).service; } while (!componentname.getPackageName().equals(s) || !componentname.getClassName().equals((new StringBuilder(String.valueOf(s))).append(".business.RemoteSSOService").toString())); return componentname; } private boolean startSingleSignOn(String s, String s1) { boolean flag = true; Intent intent = new Intent(); intent.setClassName(s, s1); intent.putExtras(mWeibo.getAuthInfo().getAuthBundle()); intent.putExtra("_weibo_command_type", 3); intent.putExtra("_weibo_transaction", String.valueOf(System.currentTimeMillis())); if (!SecurityHelper.validateAppSignatureForIntent(mAuthActivity, intent)) { return false; } try { mAuthActivity.startActivityForResult(intent, mSSOAuthRequestCode); } catch (ActivityNotFoundException activitynotfoundexception) { flag = false; } mAuthActivity.getApplicationContext().unbindService(mConnection); return flag; } public void authorize(int i, WeiboAuthListener weiboauthlistener, String s) { mSSOAuthRequestCode = i; mAuthListener = weiboauthlistener; if (!bindRemoteSSOService(mAuthActivity.getApplicationContext(), s) && mWeibo != null) { mWeibo.anthorize(mAuthListener); } } public void authorize(WeiboAuthListener weiboauthlistener) { authorize(32973, weiboauthlistener, null); } public void authorize(WeiboAuthListener weiboauthlistener, String s) { authorize(32973, weiboauthlistener, s); } public void authorizeCallBack(int i, int j, Intent intent) { if (i != mSSOAuthRequestCode) goto _L2; else goto _L1 _L1: if (j != -1) goto _L4; else goto _L3 _L3: if (SecurityHelper.checkResponseAppLegal(mAuthActivity, intent)) goto _L5; else goto _L2 _L2: return; _L5: String s = intent.getStringExtra("error"); if (s == null) { s = intent.getStringExtra("error_type"); } if (s != null) { if (s.equals("access_denied") || s.equals("OAuthAccessDeniedException")) { LogUtil.d("Weibo_SSO_login", "Login canceled by user."); mAuthListener.onCancel(); return; } String s1 = intent.getStringExtra("error_description"); if (s1 != null) { s = (new StringBuilder(String.valueOf(s))).append(":").append(s1).toString(); } LogUtil.d("Weibo_SSO_login", (new StringBuilder("Login failed: ")).append(s).toString()); mAuthListener.onWeiboException(new WeiboDialogException(s, j, s1)); return; } android.os.Bundle bundle = intent.getExtras(); Oauth2AccessToken oauth2accesstoken = Oauth2AccessToken.parseAccessToken(bundle); if (oauth2accesstoken != null && oauth2accesstoken.isSessionValid()) { LogUtil.d("Weibo_SSO_login", (new StringBuilder("Login Success! ")).append(oauth2accesstoken.toString()).toString()); mAuthListener.onComplete(bundle); return; } else { LogUtil.d("Weibo_SSO_login", "Failed to receive access token by SSO"); mWeibo.anthorize(mAuthListener); return; } _L4: if (j == 0) { if (intent != null) { LogUtil.d("Weibo_SSO_login", (new StringBuilder("Login failed: ")).append(intent.getStringExtra("error")).toString()); mAuthListener.onWeiboException(new WeiboDialogException(intent.getStringExtra("error"), intent.getIntExtra("error_code", -1), intent.getStringExtra("failing_url"))); return; } else { LogUtil.d("Weibo_SSO_login", "Login canceled by user."); mAuthListener.onCancel(); return; } } if (true) goto _L2; else goto _L6 _L6: } private class _cls1 implements ServiceConnection { final SsoHandler this$0; public void onServiceConnected(ComponentName componentname, IBinder ibinder) { RemoteSSO remotesso = com.sina.sso.RemoteSSO.Stub.asInterface(ibinder); try { String s = remotesso.getPackageName(); String s1 = remotesso.getActivityName(); if (!startSingleSignOn(s, s1)) { mWeibo.anthorize(mAuthListener); } return; } catch (RemoteException remoteexception) { remoteexception.printStackTrace(); } } public void onServiceDisconnected(ComponentName componentname) { mWeibo.anthorize(mAuthListener); } _cls1() { this$0 = SsoHandler.this; super(); } } }